#ifndef OBJECT_H
#define OBJECT_H

#include <string>


class Object
{
public:
//	Object();
//	~Object();
	virtual bool isCreature();// {return false;}
	virtual bool isItem();//	{return false;}
	virtual bool isTerrain();// {return false;}
	std::string name();
	char symbol();
	int x(); 	
	int y();
	int z();
	
protected:
	std::string NAME;
	char SYM;
	int X;
	int Y;
	int Z;
};

class Creature : public Object
{
public:
	Creature(std::string, char, int, int, int, bool, int, int, int, int, int, int, int, int, int, int);
	bool isCreature();
	bool isItem();
	bool isTerrain();
	bool isPC();
	int currentHitpoints();
	int currentEnergy();
	int currentStrength();
	int currentDexterity();
	int currentConstitution();
	int maximumHitpoints();
	int maximumEnergy();
	int maximumStrength();
	int maximumDexterity();
	int maximumConstitution();
	void setSymbol(char);
	void move(int, int, int);
	void setCurrentHitpoints(int);
	void setCurrentEnergy(int);
	void setCurrentStrength(int);
	void setCurrentDexterity(int);
	void setCurrentConstitution(int);
	void setMaximumHitpoints(int);
	void setMaximumEnergy(int);
	void setMaximumStrength(int);
	void setMaximumDexterity(int);
	void setMaximumConstitution(int);
	
private:
	bool IS_PC;
	int CURR_HP;
	int CURR_EN;
	int CURR_STR;
	int CURR_DEX;
	int CURR_CON;
	int MAX_HP;
	int MAX_EN;
	int MAX_STR;
	int MAX_DEX;
	int MAX_CON;
};


class Terrain : public Object
{
public:
	Terrain(std::string, char, int, int, int, bool, bool, int);
	bool isTerrain(); 
	bool isItem(); 
	bool isCreature(); 
	bool isPassable();
	bool isWater();
	// The following functions are for the benefit of the A* Pathfinder.
	int fCost();
	int gCost();
	int hCost();
	int terrainCost();
//	int xPrevious();
//	int yPrevious();
//	void setFCost(int);
	void setGCost(int);
	void setHCost(int);
//	void setXPrevious(int);
//	void setYPrevious(int);

private:
	bool PASSABLE;
	bool WATER;
	// The following variables are for the benefit of the A* Pathfinder.
	int FCOST;
	int GCOST;
	int HCOST;
	int TCOST;
//	int XPREV;
//	int YPREV;
};

#endif
